/**********************************************************************/
/* Programa: COMPRESOR 
Este programa es el encargado del manejo de TDA - cola del compresor
Integrantes        : Catalina Windmuller, Ayelén Tamiozzo y Francisco Soler               
Fecha              : 17 de abril de 2011                                 
Versión            : 01                                                     
Nombre del archivo : cola.h */

/**********************************************************************/


#ifndef _COLA_H
	#define _COLA_H	
	#include <stdbool.h>
	typedef void* tdatoc;
	struct tnodo{
   		tdatoc dato;
   		struct tnodo* siguiente;
	};
	typedef struct tnodo *tnodoc;
	typedef struct {
   		tnodoc frente;
   		tnodoc final;
   		size_t largo;
	}tcola;
	/****************************Crear_Cola****************************/
	//Primitiva de TDA: Creación de cola 
	//Post: se crea una cola vacía, devuelve falso en caso de error
	bool crear_cola (tcola *cola);
	
	/****************************Cola_Vacía****************************/
	//Primitiva de TDA: Verificación de estado de cola (¿vacía?)
	//Pre: la cola fue creada
	//Post: devuelve true en caso de estar vacío, false en caso contrario
	bool cola_vacia (tcola cola );
	
	/**************************Insertar_Cola***************************/
	//Primitiva de TDA: Insertar elemento en el final de la cola
	//Pre: la cola existe
	//Post: se agregó un nodo con el dato recibido, al final de la cola 
	bool insertar_cola (tcola *cola,tdatoc elemento);
	
	/***************************Borrar_Cola****************************/
	//Primitiva de TDA: Borrar elemento en el principio de la cola
	//Pre: la cola existe y no es vacía
	//Post: se eliminó el primer nodo de la cola, el dato contenido es
	//almacenado en elemento. Devuelve false si esta vacía 
	bool borrar_cola (tcola* cola, tdatoc *elemento);
	
	/**************************Destruir_Cola***************************/
	//Primitiva de TDA: Liberar memoria utilizada por la cola
	//Pre: la cola existe
	//Post: se eliminan todos los nodos de la cola y la cola en si 
	bool destruir_cola (tcola *cola );

	/**************************Ver_Frente******************************/
	//Primitiva de TDA: Ver el primer elemento de la cola
	//Pre: la cola existe y no es vacía
	//Post: devuelve en elemento el dato almacenado en el 1er nodo 
	bool ver_frente (tcola cola, tdatoc *elemento);
	
	/**************************Ver_Largo_Cola**************************/
	size_t ver_largo_cola (tcola cola);

#endif /*_COLA_H*/
